package cn.huangsm.advance.designmode.factorymode.simplefactory;

/**
 * 简单工厂模式---不利于产生系列产品
 *
 * @author huang
 * @PACKAGE_NAME cn.huangsm.advance.designmode.factorymode
 * @PROJECT_NAME advance-code
 * @date 2019/1/24
 */
public class SimpleFactory {
    /**
     * 简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单：定义一个用于创建对象的接口。
     * 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。
     * 先来看看它的组成：
     * 1.工厂类角色：这是本模式的核心，含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
     * 2.抽象产品角色：它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
     * 3.具体产品角色：工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
     */
    private final float re;
    private final float im;

    private SimpleFactory(float re, float im) {
        this.re = re;
        this.im = im;
    }

    public static SimpleFactory valueOf(float re, float im) {
        return new SimpleFactory(re, im);
    }

    public static SimpleFactory valueOfPolar(float r, float theta) {
        return new SimpleFactory((float) (r * Math.cos(theta)), (float) (r * Math.sin(theta)));
    }
    /**
     * 还有一种目前比较流行的规范是把静态工厂方法命名为valueOf或者getInstance。
     * 类似于Integer.valueOf(100)就是静态工厂模式
     * Calendar cal=Calendar.getInstance(Locale.CHINA); //返回符合中国标准的日历
     */
}
